package demo3;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 姚东名
 * Date: 2024-06-08
 * Time: 17:00
 */
public class Test {
    /*
    3.数组的应用场景*/
//3.1保存数据
    public static void main2(String[] args) {
        int[] array = {1, 2, 3};
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
    }
//3.2作为函数的参数
    //1.参数传基本数据类型
    public static void func(int x) {
        x = 10;
        System.out.println("x = "+x);
    }
    public static void main1(String[] args) {
        int num = 0;
        func(num);
        System.out.println("num = "+num);
    }
//发现func方法中修改形参 x 的值，不影响实参的num值
    //2.参数传数组类型(引用数据类型)
    public static void func1(int[] a) {
        a[0] = 10;
        System.out.println("a[0] = "+a[0]);
    }
    public static void main3(String[] args) {
        int[]array = {1, 2, 3};
        func1(array);
        System.out.println("array[0] = "+array[0]);
    }
//发现在func1方法内部修改数组的内容，，方法外部的数组内容也发生了改变
//因为数组是引用类型，按照引用类型来进行传递，是可以修改其中存放的内容的

//    总结：所谓的“引用”本质上只是存了一个地址，Java将数组设定成引用类型，这样的话后续进行数组参数传递，其实只是将数组的地址传入函数形参中，这样就可以避免对整个数组的拷贝(数组可能较长，那么拷贝开销就会很大)

//3.3作为函数返回值
    //比如：获取斐波那契数列的前N项
    public static void main(String[] args) {
        int[] array = fib(10);//让array引用也指向了fib方法的array数组
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
    }
    public static int[] fib(int n) {
        if(n <= 0) {
            return null;
        }
        //创建一个可变数组：
        int[] array = new int[n];
        array[0] = array[1] = 1;

        for (int i = 2; i < n; i++) {
            array[i] = array[i - 1] + array[i - 2];
        }
        return array;
    }
}
